package com.fengkai.filepost.pdfoutstream.test.ODsolutions;

import java.util.*;

/**
 * @author Fengkai
 * @creat 2023/4/18
 * 小华和小薇一起通过玩积木游戏学习数学。
 * 他们有很多积木，每个积木块上都有一个数字，积木块上的数字可能相同。
 * 小华随机拿一些积木挨着排成一排，请小薇找到这排积木中数字相同目所处位置最远的2块积木块，计算他们的距离。
 * 小薇请你帮忙替她解决这个问题。
 * 输入描述
 * 第一行输入为N，表示小华排成一排的积大总数。
 * 接下来 N 行每行一个数字，表示小花排成一排的积大上数字。
 * 输出描述
 * 相同数字的积木的位置最远距离;
 * 如果所有积木数字都不相同，请返回 -1
 */
public class JiMuGame {
    public static void main (String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = scanner.nextInt();
        }
        System.out.println(jimuGame(nums));
    }

    public static int jimuGame (int[] nums) {
        HashMap<Integer, Integer> intCountMap = new HashMap<>();
        for (int num : nums) {
            intCountMap.put(num, intCountMap.getOrDefault(num, 0) + 1);
        }
        if (nums.length == intCountMap.size()) {
            return -1;
        }

        int result = -1;
        for (Map.Entry<Integer, Integer> integerIntegerEntry : intCountMap.entrySet()) {
            if (integerIntegerEntry.getValue() >= 2) {
                int left = 0, right = nums.length - 1;
                if (nums[left] != integerIntegerEntry.getKey()) {
                    left++;
                }
                if (nums[right] != integerIntegerEntry.getKey()) {
                    right--;
                }
                result = Math.max(result, right - left);
            }
        }
        return result;
    }
}
